# -*- coding: utf-8 -*-
"""
查询 数据库过去一周测试数 生成图形化报告
"""


import time
from sql_connect import Session


def sql_query():
    # 调用连接数据库函数
    session = Session(database='test_weekly_report', host='127.0.0.1', user='root', password='q0179884652')

    #创建 列表存入过去一周的日期
    date_lis = []

    # 查询时间并转换为时间戳
    sql_date = "SELECT UNIX_TIMESTAMP(CreateTime) FROM test_cases WHERE DATE_SUB(CURRENT_TIMESTAMP , INTERVAL 7 DAY) <= date(CreateTime)"

    res = session.query(sql_date)
    # 因为在pycharm里查询的时间不是时间格式 所以转换为时间戳  再将时间戳转换为日期格式
    for i in res:   # 遍历时间戳 列表
        if i not in date_lis:
            timestamp = i['UNIX_TIMESTAMP(CreateTime)']    # 每一个时间戳
            # 将时间戳转换为日期格式
            timeArray = time.localtime(timestamp)
            otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
            # 只要年月日 以‘ ’为分割线
            sql_time  = otherStyleTime.split(' ')[0]
            if sql_time not in date_lis:
                date_lis.append(sql_time)


    # 用时间 来查询数据库test数据 和test失败数据
    # 创建列表 存储 测试总数
    test_num = []
    # 创建列表 存储 测试失败总数
    test_fail_num = []
    # 遍历时间列表 查询test数据
    for tim in date_lis:
        # 查询测试总数 存入列表
        sql_test_num = f"select count(id) from test_cases where CreateTime like '{tim}%'"
        test_num_ = session.query(sql_test_num)[0]['count(id)']
        test_num.append(test_num_)

        # 查询测试失败数 存入列表
        sql_test_num = f"select count(id) from test_cases where CreateTime like '{tim}%' and testResult = 'failed'"
        test_fail_num_ = session.query(sql_test_num)[0]['count(id)']
        test_fail_num.append(test_fail_num_)
    return date_lis,test_num,test_fail_num
# 现返回3个列表 用于pyecharts

from flask import Flask
from jinja2 import Markup, Environment, FileSystemLoader
from pyecharts.globals import CurrentConfig

# 关于 CurrentConfig，可参考 [基本使用-全局变量]
CurrentConfig.GLOBAL_ENV = Environment(loader=FileSystemLoader("./templates"))

from pyecharts import options as opts
from pyecharts.charts import Bar

app = Flask(__name__, static_folder="templates")

def bar_base() -> Bar:
    c = (
        Bar()
        .add_xaxis(sql_query()[0])
        .add_yaxis("测试总数", sql_query()[1])
        .add_yaxis("失败数量", sql_query()[2])
        .set_global_opts(title_opts=opts.TitleOpts(title="测试周报", subtitle="失败数量"))
    )
    return c

@app.route("/")
def index():
    c = bar_base()
    return Markup(c.render_embed())


if __name__ == "__main__":
    app.run()

